import http from '@/utils/http'
import type { LabelValueState } from '@/types/global'
import type { PageQuery, PageRes } from '@/types/api'

const BASE_URL = '/generator/deviceStore'

/**
 * 设备出库请求接口
 */
export interface DeliveryRequest {
  id: string
  deliveryCount: number // 出库数量
  destination: number // 物资去向
  deliveryDate: string // 出库日期
  createUser: string // 使用人
  remark?: string // 备注
  backTime: string
  location: string
  scarpTime: string
  taskId?: number | null
}

/**
 * 设备库存响应接口
 */
export interface DeviceStoreResp {
  id: string
  deviceName: string
  category: number
  managementId: string
  modelId: string
  factoryId: string
  measureUnit: number
  count: string
  status: number
  location: string
  source: string
  buyDate: string
  manufacturer: string
  purchaseAmount: string
  remark: string
  destination: number
  checkoutDate: string
  deliveryDate: string
  createUserString: string
  updateUserString: string
}

/**
 * 设备库存详情响应接口
 */
export interface DeviceStoreDetailResp {
  id: string
  deviceName: string
  category: string
  managementId: string
  modelId: string
  factoryId: string
  measureUnit: string
  count: string
  status: string
  location: string
  source: string
  buyDate: string
  manufacturer: string
  purchaseAmount: string
  unit: string
  remark: string
  destination: string
  checkoutDate: string // 校准有效期
  deliveryDate: string // 出库时间
  createUser: string
  createTime: string
}

/**
 * 设备库存查询条件接口
 */
export interface DeviceStoreQuery {
  deviceName?: string
  category?: string | number
  modelId?: string
  factoryId?: string
  buyDate?: string
  sort?: string[]
}

/**
 * 设备库存分页查询接口
 */
export interface DeviceStorePageQuery extends DeviceStoreQuery, PageQuery {}

/**
 * 查询设备资源管理列表
 */
export function listDeviceStore(query: DeviceStorePageQuery) {
  return http.get<PageRes<DeviceStoreResp[]>>(`${BASE_URL}`, query)
}

/**
 * 查询设备资源管理详情
 */
export function getDeviceStore(id: string) {
  return http.get<DeviceStoreDetailResp>(`${BASE_URL}/${id}`)
}

/**
 * 新增设备资源管理
 */
export function addDeviceStore(data: Partial<DeviceStoreResp>) {
  return http.post(`${BASE_URL}`, data)
}

/**
 * 修改设备资源管理
 */
export function updateDeviceStore(data: Partial<DeviceStoreResp>, id: string) {
  return http.put(`${BASE_URL}/${id}`, data)
}

/**
 * 删除设备资源管理
 */
export function deleteDeviceStore(id: string | string[]) {
  const idParam = Array.isArray(id) ? id.join(',') : id
  return http.del(`${BASE_URL}/${idParam}`)
}

/**
 * 导出设备资源管理
 */
export function exportDeviceStore(query: DeviceStoreQuery) {
  return http.download<Blob>(`${BASE_URL}/export`, {
    params: query,
    responseType: 'blob'
  })
}

/**
 * 设备出库
 */
export function deliveryDevice(data: DeliveryRequest) {
  return http.post<void>(`${BASE_URL}/delivery`, data)
}

/**
 * 整理存储库：删除数量为0且与周转库无关联的设备
 */
export function organizeDeviceStore() {
  return http.post<{ success: boolean; data: number; msg: string }>(`${BASE_URL}/organize`)
}

/**
 * 查询设备列表（字典）
 */
export function listDeviceDict(query?: { status: number }) {
  return http.get<LabelValueState[]>(`${BASE_URL}/dict`, query)
}

/**
 * 下载设备导入模板
 */
export function downloadDeviceStoreImportTemplate() {
  return http.download(`${BASE_URL}/import/template`)
}

/**
 * 解析设备导入数据
 */
export function parseImportDeviceStore(data: FormData) {
  return http.post(`${BASE_URL}/import/parse`, data)
}

/**
 * 导入设备
 */
export function importDeviceStore(data: any) {
  return http.post(`${BASE_URL}/import`, data)
}

/**
 * 更新设备状态
 */
export function updateDeviceStatus(id: string, status: number) {
  return http.get(`${BASE_URL}/updateStatus/${status}/${id}`)
    .then(res => ({
      ...res,
      success: res.success ?? true,
      timestamp: res.timestamp || Date.now()
    }))
    .catch((error: any) => {
      // 如果响应拦截器已经处理了错误，需要从错误对象中提取信息
      const errorMessage = error?.message || error?.response?.data?.message || error?.response?.data?.msg || '状态修改失败'
      return Promise.reject({
        ...error,
        msg: errorMessage,
        message: errorMessage,
        success: false
      })
    })
}

/**
 * 导出即将到期设备清单
 */
export function exportExpiringDeviceStore(query: DeviceStoreQuery) {
  return http.download<Blob>(`${BASE_URL}/export/expiring`, {
    params: query,
    responseType: 'blob'
  })
}

/**
 * 传感器统计查询条件
 */
export interface SensorStatisticsQuery {
  startDate?: string  // 开始日期
  endDate?: string    // 结束日期
  modelId?: string    // 型号
  manufacturer?: string  // 生产厂家
  source?: string  // 购置来源
}

/**
 * 传感器统计响应
 */
export interface SensorStatisticsResp {
  deviceName: string    // 设备名称
  modelId: string       // 型号
  manufacturer: string   // 生产厂家
  totalCount: number    // 总数量
  stockCount: number     // 库存数量
  usedCount: number     // 使用数量
  source?: string       // 购置来源
}

/**
 * 耗材统计查询条件
 */
export interface ConsumableStatisticsQuery {
  startDate?: string    // 开始日期
  endDate?: string      // 结束日期
  deviceName?: string   // 设备名称
  modelId?: string      // 型号
  manufacturer?: string // 生产厂家
}

/**
 * 项目使用明细
 */
export interface ProjectUsageDetail {
  projectId: number     // 项目ID
  projectName: string   // 项目名称
  usageCount: number     // 使用数量
}

/**
 * 耗材统计响应
 */
export interface ConsumableStatisticsResp {
  deviceName: string              // 设备名称
  modelId: string                 // 型号
  manufacturer: string             // 生产厂家
  remainingStock: number          // 剩余库存数量
  usedCount: number               // 使用数量
  projectUsageDetails?: ProjectUsageDetail[]  // 各项目使用数量明细
}

/**
 * 通用响应结果接口
 */
export interface Result<T = any> {
  code: number
  msg?: string
  message?: string
  data: T
  success: boolean
  timestamp?: number
}

/**
 * 查询传感器统计
 */
export function getSensorStatistics(query: SensorStatisticsQuery) {
  return http.post<Result<SensorStatisticsResp[]>>(`${BASE_URL}/statistics/sensor`, query)
}

/**
 * 查询耗材统计
 */
export function getConsumableStatistics(query: ConsumableStatisticsQuery) {
  return http.post<Result<ConsumableStatisticsResp[]>>(`${BASE_URL}/statistics/consumable`, query)
}
